 1.参数优化
   
   1).本地模式
   当Hive处理的数据量较小时，启动分布式去处理数据会有点浪费，因为可能启动的时
间比数据处理的时间还要长。Hive支持将作业动态地转为本地模式，需要使用下面的
配置:
   SET hive.exec.mode.local.auto=true; -- 默认 false
   SET hive.exec.mode.local.auto.inputbytes.max=50000000;
   SET hive.exec.mode.local.auto.input.files.max=5; -- 默认 4
   一个作业只要满足下面的条件，会启用本地模式
   输入文件的大小小于 hive.exec.mode.local.auto.inputbytes.max 配置的大小
   map任务的数量小于 hive.exec.mode.local.auto.input.files.max 配置的大小
   reduce任务的数量是1或者0
  2).严格模式
  所谓严格模式，就是强制不允许用户执行3种有风险的HiveQL语句，一旦执行会直接
失败。这3种语句是：
  查询分区表时不限定分区列的语句；
  两表join产生了笛卡尔积的语句；
  用order by来排序，但没有指定limit的语句。
  要开启严格模式，需要将参数 hive.mapred.mode 设为strict(缺省值)。
  该参数可以不在参数文件中定义，在执行SQL之前设置(set hive.mapred.mode=nostrict)
  3).JVM重用
  默认情况下，Hadoop会为为一个map或者reduce启动一个JVM，这样可以并行执行
map和reduce。
  当map或者reduce是那种仅运行几秒钟的轻量级作业时，JVM启动进程所耗费的时
间会比作业执行的时间还要长。Hadoop可以重用JVM，通过共享JVM以串行而非并
行的方式运行map或者reduce。
  JVM的重用适用于同一个作业的map和reduce，对于不同作业的task不能够共享
JVM。如果要开启JVM重用，需要配置一个作业最大task数量，默认值为1，如果设置
为-1 ，则表示不限制：
  # 代表同一个MR job中顺序执行的5个task重复使用一个JVM，减少启动和关闭的开销
   SET mapreduce.job.jvm.numtasks=5;
   这个功能的缺点是，开启JVM重用将一直占用使用到的task插槽，以便进行重用，直
到任务完成后才能释放。如果某个“不平衡的”job中有某几个reduce task执行的时间要
比其他Reduce task消耗的时间多的多的话，那么保留的插槽就会一直空闲着却无法被其
他的job使用，直到所有的task都结束了才会释放。